package hadoop;

import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;


// 这里的Reducer是对每一组相同的<k, v>都调用一次，因此key是同一个key，但是value(出现次数)就是用迭代器装了，虽然都是1
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
    int sum; // 用来记录每个单词出现的次数的，在这里定义的理由同Mapper
    IntWritable v = new IntWritable(); // 用来存放单个单词总出现次数

    // 里面封装了对Map处理后的键值对的处理逻辑
    // Context context临时存储reduce端产生的结果
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException{

        // 1.对单个单词的词频进行累加求和：
        sum = 0;
        for(IntWritable count : values){
            sum += count.get();
        }

        // 2.输出
        v.set(sum); // 将总出现次数转换为Hadoop支持的数据类型IntWritable
        context.write(key, v); // 将单个单词出现次数存到context中

    }

}